#include <iostream>
#include <termios.h>
#include <unistd.h>

char getKey() {
    struct termios oldt, newt;
    char ch;
    
    // 获取当前终端设置
    tcgetattr(STDIN_FILENO, &oldt);
    newt = oldt;
    
    // 禁用缓冲区
    newt.c_lflag &= ~(ICANON | ECHO); 
    newt.c_cc[VMIN] = 1;
    newt.c_cc[VTIME] = 0;
    
    // 设置新的终端设置
    tcsetattr(STDIN_FILENO, TCSANOW, &newt);
    
    // 获取一个字符
    ch = getchar();
    
    // 恢复终端设置
    tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
    
    return ch;
}

int main() {
    char ch;
    std::cout << "按下任意键并查看键值 (按 'q' 退出):\n";
    
    while (true) {
        ch = getKey();  // 获取键盘输入
        std::cout << "键值: " << (int)ch << " ('" << ch << "' 键)\n";
        
        // 如果按下 'q' 或 'Q'，退出程序
        if (ch == 'q' || ch == 'Q') {
            break;
        }
    }

    return 0;
}
